想法:
年底要到台北跟三五好友去跨年,想要搭火車去台北,車票多少錢?
不用按鈕,直接輸入「數量」可立即看到總金額 (數量*票價)
$(this) : 觸發事件的當前元素
closest() : 往上查找 只要找到符合條件的 就停止尋找
val():獲取數值
find() : 搜索元素
其他:data 為html5新增的屬性,可以暫存數值或是程式來存取資料
W3C data屬性:https://www.w3schools.com/tags/att_global_data.asp
<h2>火車 票價表:</h2>
<ul>
<li class="ticket" data-price ="300">
<h4>高雄台南來回</h4>
<p>$300/1人</p>
<p>數量:
<input type="number" class="quantity" value ="1">
</p>
<p>價錢:$<span id ="total">300</span></p>
</li>
<li class="ticket" data-price ="500">
<h4>台中台北來回</h4>
<p>$500/1人</p>
<p>數量:
<input type="number" class="quantity" value ="1">
</p>
<p>價錢:$<span id ="total">500</span></p>
</li>
<li class="ticket" data-price ="800">
<h4>高雄台北來回</h4>
<p>$800/1人</p>
<p>數量:
<input type="number" class="quantity" value ="1">
</p>
<p>價錢:$<span id ="total">800</span></p>
</li>
</ul>
因為不要按鈕,所以要想輸入就得到結果,就是監聽「鍵盤事件」:
「keypress」、「keydown」、「keyup」
這次案例因為輸入鍵盤要即時顯示價錢,所以適用「keyup」輸入即顯示。
$('.ticket').on( 'keyup','.quantity',function(){
});
在這監聽事件要做到下列事情:
獲取車票單價(data-price):取得數值
//獲取車票單價(data-price)
var price = $(this).closest('.ticket').data('price');
//表達式前面加 + 則傳回計算用的數值,就能運算
var price = +$(this).closest('.ticket').data('price');
得到input項目中輸入的數量
// 觸發keyup事件為input,用this得到input元素,要得到input輸入的數值,用val()
var quantity = $(this).val();
//表達式前面加 + 則傳回計算用的數值,就能運算
var quantity = +$(this).val();
根據單價乘以數量得到總價,並顯示
//觸發keyup事件往上找'.ticket',並往下找到'#total'
$(this).closest('.ticket').find('#total');
//在'#total'放置 價格和數量相乘的結果
$(this).closest('.ticket').find('#total').text(price*quantity);
但是滑鼠去點擊增加則沒反應,所以要再增加滑鼠事件。
新增click監控事件,內容與keyup相同
$('.ticket').on( 'click','.quantity',function(){
//與keyup同樣內容
}
codepen網址:https://codepen.io/yuski/pen/eymYRM